package conm.expanddemo;

import java.util.Random;
import java.util.Scanner;

/*
 *      双色球
 *
 * */
//类名java名
public class Test01 {
    public static void main(String[] args) {
        //1.首先，考虑方法是否需要接收数据处理？
        //	双色球彩票的规则非常明确，没有什么数据需要传递给方法。
        //	所以，不需要参数
        //

        //2.接着，考虑方法是否需要返回值？
        //	方法最终的结果是需要一注双色球彩票的号码，一注彩票有7个号码，可以用一个数组来存
        //	所以，返回值是一个数组
        //
        //3.最后，考虑方法内部的业务逻辑怎么编写？
        //	1)首先需要准备一个int类型数组，长度为7; 用于存储产生的投注号码
        //	2)循环遍历数组的前6个元素，采用键盘录入的方式，给前区6个红球赋值
        //		要求录入的整数在1~33范围内，同时录入的整数在数组中不能已存在，否则重新录入
        //	3)最后再录入一个整数，给后区一个蓝球赋值
        //		要求整数必须在1~16范围内
        int[] createLuckNumber = createLuckNumber();
        printArray(createLuckNumber);
        int[] ints = userSelectNumbers();
        printArray(ints);
        //测试,调用方法
        compare(createLuckNumber,ints);
    }

    //1.用户投注一组号码(前6个是红球,最后一个是篮球),并返回用户投注的号码
    private static int[] userSelectNumbers() {
        //1.1定义一个数组用于存储,用户投注号码
        int[] userNumber = new int[7];
        //1.2创建扫描器
        Scanner sc = new Scanner(System.in);
        //1.3遍历数组,录入用户投注的号码
        for (int i = 0; i < userNumber.length; i++) {

            //1.4提醒用户输入第几个号码
            if (i <= userNumber.length - 2) {
                System.out.println("请输入第" + (i + 1) + "蓝色号码");
                userNumber[i] = sc.nextInt();

                //对前6个数据进行判断,是否在合理范围内
                if (userNumber[i] < 1 || userNumber[i] > 33 || exist(userNumber, userNumber[i])) {

                    System.out.println("您输入额数据不再合理范围内,请重新输入1-33之间的数据,且不重复的数据");
                    i--;
                    continue;
                }
            } else {
                System.out.println("请输入第" + (i + 1) + "蓝色号码");
                userNumber[i] = sc.nextInt();
                if (userNumber[i] < 1 || userNumber[i] > 16 || exist(userNumber, userNumber[i])) {
                    System.out.println("您输入额数据不再合理范围内,请重新输入1-16之间的数据,且不重复的数据");
                    i--;
                    continue;
                }
            }
        }
        return userNumber;
    }

    //1.1定义一个方法,判断这个号码在数组中是是否存在
    private static boolean exist(int[] numbers, int number) {
        //需求:判断number这个数字是否在数组中存在
        //1.1.1遍历数组进行比较
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] == 0){
                break;
            }
            if (number == numbers[i]) {
                return false;
            }
        }
        return true;
    }

    //独立功能,独立成方法
    //2.系统随机产生一组中奖号码(前6个事红球,最后一个是蓝球), 并返回这组中奖号码
    public static int[] createLuckNumber() {
        //2.1创建数组,用于存储系统产生的号码
        int[] createNumber = new int[7];
        //2.2创建随机数对象
        Random random = new Random();

        //2.3遍历数组.将随机到的数据进行共存出进去
        for (int i = 0; i < createNumber.length; i++) {
            //定义一个变量,记录数组的值,可以减少对数组的访问

            //2.4判断数据,是否为前求个数据
            if (i < createNumber.length - 1 ) {
                if ( exist(createNumber, createNumber[i])) {
                    createNumber[i] = random.nextInt(33) + 1;
                }
            } else {
                if ( exist(createNumber, createNumber[i])) {
                    createNumber[i] = random.nextInt(16) + 1;
                }

            }
        }

        //2.4将系统产生的中奖号码,返回

        return createNumber;
    }

    //独立功能,独立成一个方法
    //3.传进两组号码,判断用户投注号码的中奖情况,并输出
    //1.参数列表 2.返回值类型
    //分析,需要参数, 返回值类型void
    public static void compare(int[] userNumber, int[] luckNumbers) {

        //3.遍历两个数组进行比较---------值判断篮球
        /*for (int i = 0; i < userNumber.length; i++) {
            //定义一个变量存储数组中的数据,避免重复访问数组
            int userInNumber = userNumber[i];
            int luckInNumber = userNumber[i];
            if (userInNumber == luckInNumber) {
                System.out.println("恭喜你,中了头奖,奖金是1000万");
            } else if (userInNumber == luckInNumber && userNumber[userNumber.length] != userNumber[luckNumbers.length]) {
                //就是一等奖
                System.out.println("恭喜您,中了一等奖,奖金是500万");
            } else if () {

            }
        }*/
        //3.1分别定义2个变量用于记住红球命中了几个以及蓝球命中了几个
        int redCount = 0;
        int blueCount = 0;
        //3.2遍历数组进行红球数据比较
        for (int i = 0; i <= 5; i++) {
            //比较
            if (userNumber[i] == luckNumbers[i]) {
                redCount++;
            }
        }
        //3.2对红球进行判断
        blueCount = userNumber[6] == luckNumbers[6] ? blueCount + 1 : blueCount;

        System.out.println(redCount);
        System.out.println(blueCount);
        //3.3对获奖情况做出回答
        if (redCount == 6 && blueCount == 1) {
            System.out.println("恭喜你,中了头奖,奖金是1000万");
        } else if (redCount == 6 && blueCount == 0) {
            System.out.println("恭喜你,中了一等奖,奖金是500万");
        } else if (redCount == 5 && blueCount == 1) {
            System.out.println("恭喜你,中了二等奖,奖金是3000元");
        } else if (redCount == 5 && blueCount == 0 || redCount == 4 && blueCount == 1) {
            System.out.println("恭喜你中了三等奖,奖金是200块");
        } else if (redCount == 4 && blueCount == 0 || redCount == 3 && blueCount == 1) {
            System.out.println("恭喜你中了优秀奖,奖金是10块");
        } else if (redCount < 3 && blueCount == 1) {
            System.out.println("恭喜你中了查边奖, 奖金是5块");
        } else {
            System.out.println("很遗憾,你没中奖");
        }
    }

    //4.定义一个方法用于打印数组
    public static void printArray(int[] arr) {
        //先打印[
        System.out.print("[");
        //遍历数组,获取所有数据
        for (int i = 0; i < arr.length; i++) {
            System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ", ");
        }

        //最后再打印
        System.out.println("]");
    }

}
